<?php

namespace Admin\Model;
use Think\Model;
/**
 * 读书比赛模型
 */
class BookGameModel extends Model{
	
	private $gameStudentCount=0;
	
	/* 自动验证规则 */
	protected $_validate = array(
		array('book_game_name', 'require', '比赛名称不能为空！', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
		array('classids', 'require', '比赛班级不能为空！', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
		array('bookids', 'require', '当前系列下没有图书，请选择其他系列！', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
	);

	/**
	 * 开启比赛
	 * @param $bookGameId 比赛id
	 * @return boolean true表示直接commit，false不提交
	 */
	public function startBookGame($bookGameId){
		$this->startTrans();
		//通过比赛id得到参与比赛的班级ids和图书ids
		$data				=	$this->find($bookGameId);
		$classIds			=	explode(',', $data['classids']);
		$bookIds			=	explode(',', $data['bookids']);
		//通过得到的ids添加数据
		if($this->addRelation($bookGameId, $classIds, $bookIds)===false){
			//添加失败回滚事务。
			$this->rollback();
			return false;
		}else {
			//添加成功则修改比赛信息
			$data['isready']	=	2;
			$data['start_time']	=	NOW_TIME;
			$data['studentcount']=$this->gameStudentCount;
			if ($this->save($data)===false) {
				//保存比赛信息失败回滚事务。
				$this->rollback();
				$this->error	=	'添加读书比赛失败！';
				return false;
			}else{
				//保存比赛信息成功提交事务。
				$this->commit();
				return true;
			}
		}
	}
	
	/**
	 * 添加比赛关系信息
	 * @param $bookGameId	            比赛id
	 * @param $classIds		            比赛涉及班级ids
	 * @param $bookIds		            比赛涉及图书ids
	 * @param $gameStudentCount  学生总人数统计
	 * @return int		                        返回参加比赛学生总人数
	 */
	private function addRelation($bookGameId,$classIds,$bookIds){
		$students  =  M('Student');
		for($i=0;$i<count($classIds);$i++){
			$studentCount =  0;//初始化该班参与比赛学生人数为0
			/* 构造学生查询条件 */	
			$maps['classid']  =  $classIds[$i];
			$maps['status']   =  1;//学生状态:（-1：已删除，0：禁用，1：正常）
			$maps['isstudy']  =  1;//在读状态:（1表示在读，2表示毕业，3表示退学，默认为1）显示在读。
			$studentList  =  $students->where($maps)->select();
			$studentsIds  =  array_column($studentList,'id');
			if(!empty($studentsIds)){//如果学生不为空，即 该班有学生
				$studentCount     = count($studentsIds);//统计当前班级学生人数
				$this->gameStudentCount += $studentCount;
				
				for($k=0;$k<$studentCount;$k++){
					$list['book_game_id']  	=  $bookGameId;
					$list['studentid']     	=  $studentsIds[$k];
					$list['schoolid']      	=  session('user_auth.schoolid');
					$list['schoolname']   	=  session('user_auth.schoolname');
					$list['have_read_count']=  0;
					$list['integral']    	=  0;
					if(!$this->addGame('BookGameRelation',$list)){
						return false;
					}
					for($a = 0 ; $a < count($bookIds) ; $a++){
						$booklistRelation['book_game_id']  =  $bookGameId;
						$booklistRelation['studentid']     =  $studentsIds[$k];
						$booklistRelation['bookid']        =  $bookIds[$a];
						$booklistRelation['schoolid']      =  session('user_auth.schoolid');
						$booklistRelation['schoolname']    =  session('user_auth.schoolname');
						$booklistRelation['isready']       =  1;
						$booklistRelation['now_integral']  =  1;//1个积分
						//booklist_game_relation学生读书比赛与书目关系表
						if(!$this->addGame('BooklistGameRelation',$booklistRelation)){
							return false;
						}
					}
				}
			}
			
			for($j = 0 ; $j < count($bookIds) ; $j++){
				$classRelation['bookid']        =  $bookIds[$j];
				$classRelation['classid']       =  $classIds[$i];
				$classRelation['book_game_id']  =  $bookGameId;
				$classRelation['schoolid']      =  session('user_auth.schoolid');
				$classRelation['schoolname']    =  session('user_auth.schoolname');
				$classRelation['read_times']    =  0;
				//班级读书比赛与书目关系表
				if(!$this->addGame('ClassGameRelation',$classRelation)){
					return false;
				}
			}
			//学生读书比赛关系表
			$classList['book_game_id']  =  $bookGameId;
			$classList['classid']  		=  $classIds[$i];
			$classList['studentcount']  =  $studentCount;
			$arrClassList[]        		=  $classList;
		}
		//读书比赛与班级表
		if(!$this->addGame('ClassGame',$arrClassList,true)){
			return false;
		}
		
		for($i = 0 ; $i < count($bookIds) ; $i++){
			$bookStatus['book_game_id']  =  $bookGameId;
			$bookStatus['schoolid']      =  session('user_auth.schoolid');
			$bookStatus['schoolname']    =  session('user_auth.schoolname');
			$bookStatus['bookid']        =  $bookIds[$i];
			$bookStatus['count_book']    =  0;
			$arrBookStatus[]             =  $bookStatus;
		}
		//读书比赛中的书目状态表
		if(!$this->addGame('BookGameStatus',$arrBookStatus,true)){
			return false;
		}
		//返回true
		return true;
	}
	/**
	 * @param $model 模型
	 * @param $map   查询条件
	 * $param $arr   true表示为二维数组，false表示为一维数组
	 *
	 **/
	private function addGame($model,$map,$arr=false){
		$model  =  M($model);
		if($arr){
			$rst  = $model->addAll($map);
		}else{
			$rst  =  $model->add($map);
		}
		if (!$rst) {
			return false;
		}else{
			return true;
		}
	}
	
	
	
	
	
	

// 	public function editBookGame($bookGameId,$gameInfo,$classInContestId,$bookIds){
// 		/*
// 		 * 对参赛班级的处理：
// 		*
// 		* 通过参赛班级ids与原参数班级ids比较，获取已删除班级 ids
// 		*
// 		* 获取ids（参赛班级）
// 		* 		对于新增的班级id 调用addRelation方法
// 		* */
// 		//获取原比赛班级ids
// 		$classGame	=	M('ClassGame');
// 		$preClassId	=	$classGame->where('gameid='.$bookGameId)->select();
// 		$preClassIds=	array_column($preClassId,'classid');
// 		//比较原班级id与现班级id 将新增的id取出 放入$classIds中  调用addRelation方法
// 		//						将删除的id取出 放入$classNotIds中 调用deleteRelation方法
// 		$classIds	=	array_diff($classInContestId, $preClassIds);
// 		$classNotIds=	array_diff($preClassIds,$classInContestId);
	
// 		//修改比赛名称
// 		$this->where('id='.$bookGameId)->save($gameInfo);
	
// 		if($classIds){//如果有新增参与比赛的班级id
// 			$this->addRelation($bookGameId, $classIds, $bookIds);
// 		}
// 		if($classNotIds){//如果有删除参与比赛的班级id
// 			$this->deleteRelation($bookGameId, $classNotIds);
// 		}
	
// 	}
// 	public function deleteRelation($bookGameId,$classIds){
// 		/*
// 		 * 获取$classIds（未参赛班级）
// 		* 		删除出现在$classIds内的班级在以下两张表内的信息
// 		* 		Class_game 读书比赛与班级关系表
// 		* 		Class_game_relation 班级读书比赛与书目关系表
// 		* 		删除出现在$classIds内的班级的学生在以下两张表内的信息
// 		* 		Book_game_relation 学生读书比赛关系表
// 		*/
// 		$classGameMap['gameid']	=	$bookGameId;
// 		$classGameMap['classid']		=	array('in',$classIds);
// 		M('ClassGame')->where($classGameMap)->delete();
	
// 		$classRelationMap['book_game_id']	=	$bookGameId;
// 		$classRelationMap['classid']		=	array('in',$classIds);
// 		M('ClassGameRelation')->where($classRelationMap)->delete();
	
// 		//查询学生id
// 		$studentMap['classid']	=	array('in',$classIds);
// 		$student	=	M('Student')->where($studentMap)->field('id')->select();
// 		$studentIds	=	array_column($student,'id');
// 		$studentGameMap['book_game_id']	=	$bookGameId;
// 		$studentGameMap['studentid']	=	array('in',$studentIds);
	
// 		M('BookGameRelation')->where($studentGameMap)->delete();
	
// 	}
}
